package com.ship.contract.bean;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ship.common.core.base.BaseBean;
import com.ship.common.core.base.Joinable;
import com.ship.common.core.enums.CorporateType;
import com.ship.common.core.mapping.Label;
import com.ship.common.core.mapping.SearchItem;
import com.ship.common.core.mapping.TableColumn;
import com.ship.contract.utils.NumberFormatUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 资金管理详情表（支付结算中）
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sp_fund_manage_detail")
public class SpFundManageDetail extends BaseBean implements Joinable {
    /**
     * 公司名称
     */
    @Label(value = "公司名称")
    @SearchItem
    @TableColumn
    @TableField("corporate_name")
    @ApiModelProperty(value = "公司名称")
    private String corporateName;

    /**
     * 公司类型（1：第三方计量公司、2：船舶代理公司）
     */
    @Label(value = "公司类型", enumContent = "资金管理公司类型", multiSelect = false)
    @SearchItem
    @TableField("corporate_type")
    @ApiModelProperty(value = "公司类型（1：第三方计量公司、2：船舶代理公司）")
    private Integer corporateType;

    @Label(value = "公司类型")
    @TableField(exist = false)
    @TableColumn
    private String corporateTypeStr;

    /**
     * 关联合同id
     */
    @TableField("contract_id")
    @ApiModelProperty(value = "关联合同id")
    private Long contractId;

    /**
     * 关联合同
     */
    @Label(value = "关联合同")
    @SearchItem
    @TableColumn
    @TableField("contract_name")
    @ApiModelProperty(value = "关联合同名称")
    private String contractName;

    /**
     * 合同类型（1：船舶代理合同、2：保险合同（货险、人险）、3：第三方计量合同、4：租金相关合同--船运合同、5：加油合同）
     */
    @TableField("contract_type")
    @ApiModelProperty(value = "合同类型（1：船舶代理合同、2：保险合同（货险、人险）、3：第三方计量合同、4：租金相关合同--船运合同、5：加油合同）")
    private Integer contractType;

    /**
     * 关联合同地址
     */
    @TableField("contract_address")
    @ApiModelProperty(value = "关联合同地址")
    private String contractAddress;

    /**
     * 贸易主体(国贸、新贸)
     */
    @Label(value = "贸易主体", enumContent = "贸易主体", multiSelect = false)
    @SearchItem
    @TableField("trade_body")
    @ApiModelProperty(value = "贸易主体(国贸、新贸)")
    private Integer tradeBody;

    @Label(value = "贸易主体", enumContent = "贸易主体", multiSelect = false)
    @TableColumn
    @TableField(exist = false)
    private String tradeBodyStr;

    /**
     * 签订日期
     */
    @TableField("signing_date")
    @ApiModelProperty(value = "签订日期")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private Date signingDate;

    /**
     * 合同有效期（单位年）
     */
    @TableField("contract_validity")
    @ApiModelProperty(value = "合同有效期（单位年）")
    private BigDecimal contractValidity;

    /**
     * 账户余额(更新)
     */
    @Label(value = "账户余额")
    @SearchItem
    @TableField("account_balance")
    @ApiModelProperty(value = "账户余额(更新)")
    private BigDecimal accountBalance;

    @Label(value = "账户余额")
    @TableColumn
    @TableField(exist = false)
    private String accountBalanceStr;

    /**
     * 订单数量
     */
    @Label(value = "订单数量")
    @TableColumn
    @SearchItem
    @TableField("fund_order_number")
    @ApiModelProperty(value = "订单数量")
    private Integer fundOrderNumber;

    /**
     * 账户余额(编辑后的余额，如果该字段有值，以后用户余额使用该字段值)
     */
    @TableField("account_edit_balance")
    @ApiModelProperty(value = "账户余额(编辑后的余额，如果该字段有值，以后用户余额使用该字段值)")
    private BigDecimal accountEditBalance;

    /**
     * 初始账户余额
     */
    @Label(value = "初始账户余额")
    @SearchItem
    @TableColumn
    @TableField("account_initial_balance")
    @ApiModelProperty(value = "初始账户余额")
    private BigDecimal accountInitialBalance;

    /**
     * 资金管理id
     */
    @TableField("fund_manage_id")
    @ApiModelProperty(value = "资金管理id")
    private Long fundManageId;

    @ApiModelProperty(value = "最新支付时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private Date payDate;

    @Override
    public String getLabel() {
        return null;
    }

    @Override
    public String getValue() {
        return null;
    }

    public String getAccountBalanceStr() {
        String result = null;
        if (getAccountBalance() != null) {
            result = NumberFormatUtil.numericFormatting(accountBalance);
        }
        return result;
    }

    public String getTradeBodyStr() {
        String result = null;
        if (getTradeBody() != null) {
            if (tradeBody.equals(1)) {
                result = "国贸";
            } else if (tradeBody.equals(2)) {
                result = "新贸";
            }
        }
        return result;
    }

    public String getCorporateTypeStr() {
        String result = null;
        if (getCorporateType() != null) {
            if (corporateType.equals(CorporateType.THIRD_PARTY_CORPORATION.getCode())) {
                result = CorporateType.THIRD_PARTY_CORPORATION.getInfo();
            } else if (corporateType.equals(CorporateType.SHIP_AGENCY_CORPORATION.getCode())) {
                result = CorporateType.SHIP_AGENCY_CORPORATION.getInfo();
            }
        }
        return result;
    }
}
